/*
【问题描述】
　　给一个正整数n，输出它所有的正整数加法的分解方法。
　　注意：
　　1． 根据输入的要求决定交换加数的位置是否视为不同的分解方案。
　　2． 不分解也视为一种分解方案。
　　3． 按字典序输出所有分解方案，格式见样例。

【输入格式】
　　输入共1行，包含2个正整数n和m，之间用一个空格隔开。n表示待分解正整数，m是1或者2：
　　1表示交换加数的位置是否视为不同的分解方案；
　　2表示交换加数的位置是否视为相同的分解方案。
【输出格式】
　　输出若干行，每行表示一种分解方案。对于一种方案，先输出n，再输出一个“=”。然后输出分解的各数，不同的数之间用一个“+”连接。

样例输入
5 2
样例输出
5=1+1+1+1+1
5=1+1+1+2
5=1+1+3
5=1+2+2
5=1+4
5=2+3
5=5

样例输入
5 1
样例输出
5=1+1+1+1+1
5=1+1+1+2
5=1+1+2+1
5=1+1+3
5=1+2+1+1
5=1+2+2
5=1+3+1
5=1+4
5=2+1+1+1
5=2+1+2
5=2+2+1
5=2+3
5=3+1+1
5=3+2
5=4+1
5=5
*/

#include<bits/stdc++.h>
using namespace std; 
vector<int> path;
void backtracking1(int m,int sum){
	if(sum>m) return;
	if(sum==m){
		//result.push_back(path);
		int len=path.size();
		cout<<m<<"="<<path[0];
		if(len>1){
			for(int i=1;i<len;i++){
				cout<<"+"<<path[i];
			}
		}
		cout<<endl;
		return;
	}
	for(int i=1;i<=m;i++){
		sum+=i;
		path.push_back(i);
		backtracking1(m,sum);
		sum-=i;
		path.pop_back(); 
	}
}
void backtracking2(int m,int sum,int index){
	if(sum>m) return;
	if(sum==m){
		//result.push_back(path);
		int len=path.size();
		cout<<m<<"="<<path[0];
		if(len>1){
			for(int i=1;i<len;i++){
				cout<<"+"<<path[i];
			}
		}
		cout<<endl;
		return;
	}
	for(int i=index;i<=m;i++){
		sum+=i;
		path.push_back(i);
		backtracking2(m,sum,i);
		sum-=i;
		path.pop_back();
	}
}
int main(){
	int m,n;cin>>m>>n;
	if(n==1)
		//组合，无序 ,去重 
		backtracking1(m,0);
	//排序，有序 
	else backtracking2(m,0,1);
}
